iT邦幫忙

2023 iThome 鐵人賽

DAY 9
0

當我們買了一堆櫃子或收納盒,那最後東西到底該被收到哪邊?

在居住空間中,樓層會有地下室、一樓、二樓等不同層並具有不同功能,地下室或一樓可以用來停車,二樓以上較常用來作為日常使用的空間。在軟體中也可以將架構劃分為多層,例如資料層、業務邏輯層和展示層,每一層分別負責不同的功能。

收納通常有基本原則,使用合適容器、抽屜或櫃子將相似物品放一起來隔離和保護特定物品,收納的關鍵目標是確保物品有組織地存放,以便容易找到和使用。同樣軟體架構分層也有基本原則,例如將功能相關放在同一層,不同層次的隔離和保護有助於減少錯誤擴散,並確保低耦合和高內聚並將功能模組化,使其易於開發、測試和維護。

在進行軟體開發時,最重要的事情是軟體會需要持續維護、發展、接收新功能、改進和修復錯誤,不同於房屋的買賣,程式會隨著時間過去和開發人員流動,讓維護比建立具有相同功能的全新軟體更困難。

三層式架構

程式的架構有點像蓋房子,主要分法可以分成三層資料層 (Data Layer)、業務邏輯層 (Domain Layer)、展現層 (Presentation Layer)

  • 資料層 (Data Layer): 就像是底層跟房屋架構,確認後的變動最少
  • 業務邏輯層 (Domain Layer): 房子本身的格局設計,可稍微變動但變動也不多
  • 展現層 (Presentation Layer): 房子外觀裝飾或頂部加蓋,最多變動和彈性

資料層 (Data Layer)

資料層負責資料的儲存、檢索和管理,並提供對資料的基本操作,它包括資料庫、文件系統、外部 API 或其他資料來源。

這一層關注資料的完整性、安全性和持久性,通常使用資料庫管理系統 (如 MySQL、PostgreSQL、MongoDB 等) 來儲存資料,提供了資料操作的基本 CRUD(創建、讀取、更新、刪除)操作。

資料層通常透過業務邏輯層來操作,以進行檢索和儲存資料。

業務邏輯層 (Domain Layer)

業務邏輯層是程式的核心,負責管理程式的核心業務邏輯、流程控制。

業務邏輯層位於資料層和展現層之間,可以包含許多不同的模組和服務,以實現程式的具體功能,確保資料在不同層級之間的正確傳遞和處理。

業務邏輯層通常訪問資料層以檢索和更新資料,同時提供程式界面 (API) 供展現層使用。

展現層 (Presentation Layer)

展現層通常是最終用戶與程式互動的界面,負責將資料和程式功能呈現給最終用戶,包括用戶界面 (UI)、網頁、App 等,這一層關注用戶體驗、界面設計和互動。

展現層負責將業務邏輯提供的資料呈現給用戶,並可以接收用戶的輸入並將其傳遞給業務邏輯層,同時顯示從業務邏輯層獲取的資料。

可維護的程式碼

任何熟悉該領域的開發人員都應該能夠

  • 對功能進行優化和問題修復,並不破壞底層的東西
  • 快速理解程式碼並知道在哪裡進行更改

目標是當程式在做修改的時候,業務邏輯應該要能夠穩定的被持續測試

  • 修改展現層不應破壞任何業務邏輯
  • 修改資料庫不應影響軟體的業務規則

回到怎麼選擇套件的問題,在程式撰寫上我們要要注意新撰寫的程式對架構的影響

  • 穿透性: 原則上不是穿透原本程式架構的設計,像 Redux 就屬於可以穿透在每個角落的一個套件,以 Redux 來說就像是硬裝潢,裝下去之後做更動的成本就非常高
  • 影響範圍: 是否容易被替代,跟原本的做法會不會差很多,是否需要重寫,像一般的表格換成 Aggrid 就相當於重寫

以剛剛的三層式架構來說,也有人把三層變體成一圈一圈的洋蔥式架構,並針對功能分層製作,每一層都有自己的焦點,該架構的黃金法則是:

內圈中任何事物都無法了解外圈中的任何事物。
其中包括函數、類別、變數或任何其他命名的軟體實體。
Robert Cecil Martin

那該怎麼寫出好的架構呢? 下一篇文章小編會繼續帶大家看下去。


上一篇
想要與需要,選擇的智慧
下一篇
一次做一件事,念
系列文
前端三分鐘 X 每天三分鐘的斷捨離,讓每一天都可以早點下班30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言